#ifndef MEMPOOL_H
#define MEMPOOL_H

#include <stdio.h>
#include <stdlib.h>

// 内存池结构
typedef struct {
    size_t blockSize;    // 每个块的大小
    size_t blockCount;   // 总块数
    void* freeList;      // 空闲链表头指针
    char* data;          // 实际内存块区域
} MemoryPool;

/*
* @file mempool.h
* @brief 创建内存池
* @param blockSize 内存池每一块的大小
* @param blockCount 内存池块数
* @return 成功：内存池指针 失败：NULL
* @author zhw
* @date 2025.10.22 00:15
* @version 1.0
*/
MemoryPool* createPool(size_t blockSize, size_t blockCount);

/*
* @file mempool.h
* @brief 销毁内存池
* @param pool 内存池指针
* @return -1:pool为空 0:成功
* @author zhw
* @date 2025.10.22 00:16
* @version 1.0
*/
int destroyPool(MemoryPool* pool);

/*
* @file mempool.h
* @brief 从内存池分配一块内存
* @param pool 内存池指针
* @return 失败:NULL 成功:内存指针
* @author zhw
* @date 2025.10.22 23:20
* @version 1.0
*/
void* allocate(MemoryPool* pool);

/*
* @file mempool.h
* @brief 将内存块释放回内存池
* @param pool 内存池指针
* @param ptr 内存块数据部分指针
* @return 失败:-1 成功:0
* @author zhw
* @date 2025.10.22 23:48
* @version 1.0
*/
int deallocate(MemoryPool* pool, void* ptr) ;

#endif